function areaAccesCtrl (libel,sourceReq,emprise) {
//==================================
// Fen?tre de contr?le de servlet ayant une triple fonction :
//   - offrir une possibilit? d'arr?t pr?matur? d'une servlet , command? depuis le client.
//   - t?moigner pour l'utilisateur de la progression de la requ?te sous forme d'animation (sablier + "...")
//   - pr?server(en l absence d'autres m?canismes cod?s par ailleurs) au niveau de l'IU du lancement d'autres requ?tes concurrentes 
//     malvenues.
// Classe mono-instance par <sourceReq>.

// [libel]     (i) string : texte contenu dans la fen?tre de contr?le (ex.: recherche en cours) pr?c?dant les "..." anim?s.
//                          si l'argt est absent il n'y a pas de cr?ation de fen?tre, mais juste un masque
// [sourceReq] (i) string : d?fini l'espace dans lequel se situe la requ?te afin de garantir son unicit?
//                          si l'argt est absent la requ?te est en concurrence avec l'ensemble des requ?tes sans espace d?fini.
// [emprise]   (i) oHtml ou oHtml [] : oHtml(s) correspondant au(x) zone(s) inaccesible(s) ? l'utilisateur pdt la dur?e de la requ?te
//                                     si l'argt est absent l'emprise == toute la fen?tre du navigateur

// extensions envisageables:
//   extension ? d'autres m?ta-demandes que l'arr?t de la servlet
//   animation sous forme de barre de progression si le temps peut ?tre estim?

// gestion singletonCD
var instanceExistante =  eval (recupSingletonCD(sourceReq));

if (instanceExistante ) 
    // utilisation de l'instance unique d?ja existante
    return instanceExistante;
else     
    // initialisation de l'instance unique
    this.init(libel,sourceReq,emprise);
}

areaAccesCtrl.prototype.init = function (libel,sourceReq,emprise,typeVoile) {
//===================================================
// methode "priv?e" : initialisation de l instance unique
// argts cf. constructeur

    this.libel          = libel
    this.sourceReq      = sourceReq;
    this.emprise        = emprise;
    
    if (this.libel) {
        //titre de la fen?tre
        this.titre = libel;
        
        //positionnement dans le document principal
        var top=(document.body.clientWidth/2)-60;
        var left=(document.body.clientHeight/2)-100;
    
        // cr?ation de la fenetre de type Dialog
    //    this.fen = new Dialog("fen",top,left,200,90,""," ","transparent",emprise);
        this.fen = new rialto.widget.Dialog("fen",0,0,200,90,""," ",typeVoile||"transparent",null,this.emprise,this);
        // contenu de la fen?tre
        // texte explicatif / contr?le
        this.divLib=document.createElement("DIV");    
        this.divLib.className="libelle1";
        this.divLib.style.position="absolute";
        this.divLib.style.top="5px";        
        this.divLib.style.left="25px";        
        this.divLib.style.width="100%";                
    
        this.text=document.createTextNode(this.libel);
        this.divLib.appendChild(this.text);
        this.fen.add(this.divLib);   
    
        //image du sablier
        this.img=document.createElement("IMG");        
        this.img.src="images/sablier.gif";
        this.img.style.position="absolute";
        this.img.style.height='35px';
        this.img.style.width='27px';
        this.img.style.left='75px';
        this.img.style.top='22px';
        this.fen.add(this.img);
       
        //bouton Annuler
        var wBtn=50;
        var hBtn=60;    
        this.BANN = new rialto.widget.Button(hBtn,wBtn,"ANN","Annuler la demande",this.fen);
 
    
        this.BANN.oCiu = this;
        this.BANN.requete = function () {
           //url = dmde de stop de la servlet
           var url = this.oCiu.urlStopServ;
    
           //si elle n'existe pas on la cree (ds le bton ou ds doct )
           if (!this.iframe){        
              this.iframe=new objFrame("ifr",0,0,0,0,hidden=true);          
    //                this.iframe.create(this.getObjHtml()); //autre option possible
              this.iframe.create(window.document);
           }
    
           // envoi ordre Stop ? la servlet
           traceExec('areaAccesCtrl.requete iframe.load url= '+url,1);
           this.iframe.load(url);
        }
    
        this.BANN.onclick=function () {
            this.oCiu.stopEnCours = true;
               //traceExec('objFenWait.onclick ->requete',1);
            this.requete();  // envoi requete Stop ? la servlet
               //traceExec('objFenWait.onclick <-requete',1);
        }; 
    }
    
    // pas de fen?tre seult le masque de protection contre le lanct concurrent
    else {
        var suffFond = typeVoile||"transparent";
        var masque;
        
        this.comportVerrouillage = MasqueZones;
        masque = this.comportVerrouillage(suffFond,emprise,this);
    }
/*        
        // pas de restriction ? l'emprise on peut r?cup?rer le voile g?n?ral
        // bien que ... a revoir (en fait il faut 1 voile par sourceReq qqsoit sa taille)
        if (!emprise)
            masque = rialto.session? (rialto.session.masque?rialto.session.masque : null)
                     : null;

        if (!masque) {
*/        
/*
// cr?ation du container masquant partiellement les autres elements
          masque = document.createElement('DIV');
          //var suffFond = suffFond || 'transparent';
          masque.className = 'ecranMasque'+suffFond; //'Gris'||'transparent';
          masque.style.width =  '100%';//document.body.scrollWidth;
          masque.style.height = '100%';//document.body.scrollHeight;
          //masque.style.width =  document.body.clientWidth;
          //masque.style.height = document.body.clientHeight;
          masque.style.zIndex = 10000;
          var oThis = this;
          masque.onclick = function (e) {
              // callback pour traitement sp?cifique
              if (oThis.infoAccesInterdit)
                  oThis.infoAccesInterdit();
              stopEvent(e);
          }
          masque.id = 'voile_0';
          // pr?voir de ne masquer qu'une zone par exemple 1 fenetre
          if (this.emprise)
            if (! (this.emprise instanceof Array)) {
                this.emprise.appendChild(masque);  
            }
            
            else {
                this.emprise[0].appendChild(masque);
                for (var e=1; e < this.emprise.length; e++) {
                    var masq = this.creeMasque(suffFond,this);
                    masq.id = 'voile_'+e;
                    this.emprise[e].appendChild(masq);     
                }
            }
        
          else
            window.document.body.appendChild(masque);  
*/
/*        }
        else {
          masque.className = 'ecranMasque'+suffFond; //'Gris';
          masque.style.display='block'; 
        }

    }
*/
}
/*
areaAccesCtrl.prototype.creeMasque = function (suffFond,oThis) {
  
  // cr?ation du container masquant partiellement les autres elements
  var masque = document.createElement('DIV');
  //var suffFond = suffFond || 'transparent';
  masque.className = 'ecranMasque'+suffFond; //'Gris'||'transparent';
  masque.style.width =  '100%';//document.body.scrollWidth;
  masque.style.height = '100%';//document.body.scrollHeight;
  //masque.style.width =  document.body.clientWidth;
  //masque.style.height = document.body.clientHeight;
  masque.style.zIndex = 10000;
  var oCiu = oThis
  masque.onclick = function (e) {
    // callback pour traitement sp?cifique
    if (oCiu.infoAccesInterdit)
        oCiu.infoAccesInterdit();
    stopEvent(e);
  }
  return masque
}
*/
areaAccesCtrl.prototype.specNewReq = function (idReq, url) {
//==================================================
// ajustement de l instance de areaAccesCtrl ? la requete ? controler
// [idReq] (i) : identifiant de la requ?te ; correspond ? la valeur de l'attribut IDREQ pass? dans l'URL de la requ?te ? contr?ler
//                r?alise le lien entre la demande de base et la m?ta-demande suceptible d'?tre lanc?e dans le cadre de cette fen?tre
//               (unique au moins /espace de contr?le (cf. argts <sourceReq> du constructeur))
//                (ex: utilisation de Form.prototype.nbReq ds Form)
// [url]   (i) : url correspondant ? la requ?te ? contr?ler

// am?nagements possibles:
//   l'argt idReq n'est pas indispensable : il pourrait ?tre extrait de l'url pass?e

    // pas de fen?tre de contr?le, seult un masquage
    if (!this.libel) return;
    
    // pas de requ?te explicitement associ?e -> fonction de contr?le masqu?e
    if (! idReq) {
        this.BANN.setVisible(false);
    }
    
    // requ?te associ?e
    else {
        this.BANN.setVisible(true);
        
        // identifiant de la requ?te
        this.idReq = idReq;
        
        //constitution de l'url de dmde d arr?t de la servlet ? partir de l url de la servlet
        i = url.indexOf("?");  
        this.urlStopServ = (i==-1) ?  url : url.substr(0,i) ;
        this.urlStopServ  =   this.urlStopServ 
                                + '?METHOD=STOP'
                                + '&SOURCEREQ=' + this.sourceReq
                                + '&IDREQ='     + this.idReq;
    }
    
    //animation du texte
    this.nbPeriodeAttente = 0;
    this.animeText();
}

areaAccesCtrl.prototype.animeText =function(id){
//============================
// private method
//Cette fonction permet de faire d?filer des ......

/*
// 1er appel pas de id transmis
 //---  obj concern?
 var oThis, oHtml;
 if (id){
   oHtml = document.getElementById(id);
   oThis = oHtml.oCiu;
 }

 else
    oThis = this;
*/
        var strPoints="";
        //? chaque passage on incremente
        this.nbPeriodeAttente++;
        //si on est ? 5 on revient ? 1
        //if(this.nbPeriodeAttente>5){this.nbPeriodeAttente=0;} 
        this.nbPeriodeAttente = this.nbPeriodeAttente % 5;
        //on cree le nombre de . coorespondant
        for (i=0;i<this.nbPeriodeAttente;i++){
            strPoints+=".";
        }
        //on vire le texte
        this.divLib.removeChild(this.divLib.firstChild);
        //on re-cr?e le texte
        this.text=document.createTextNode(this.titre+" "+strPoints);
        this.divLib.appendChild(this.text);
        //on relance la fonction  
        this.time=window.setTimeout("rialto.session.objects.singletonCDs[\""+this.sourceReq+"\"].animeText()",500);
//        this.time=window.setTimeout("window.objects[\"fenWait\"].animeText()",500);
//    this.time = setTimeout( 'areaAccesCtrl.prototype.animeText(\"' + this.id + '\")'
//                            ,500);
}

areaAccesCtrl.prototype.stopControl = function(modeStop){
//=============================================

// masquage des masques autres que li?s ? la fen?tre
for (var e=0; e < this.emprise.length; e++) {
//   this.emprise[e].removeChild(this.emprise[e].lastChild);        // a revoir un peu dangereux mieux vaut identifier les masques        
   if ( (nbRef = this.emprise[e].lastChild.suppRef(this)) == 0)
       this.emprise[e].removeChild(this.emprise[e].lastChild);        // a revoir un peu dangereux mieux vaut identifier les masques        
   
// pb a revoir   this.emprise[e].removeChild(document.getElementById('voile_'+e));       
}
// masquage fen?tre
if (this.libel) {
// 1 stop peut ?tre parti juste avant le retour de r?ponse
// il faut laisser la reponse du stop supprimer la fenetre popup
    if (this.stopEnCours && (!modeStop)) return;
    this.stopEnCours = false;
/*    if (this.BANN.iframe) { // existe seult si usage precdt bton annule
            this.BANN.iframe.masque();  //sinon l iframe est visible si le bton a ?t? utilis? 
                                        // precedemment(ss doute a cause du load)
traceExec('objFenWait.arrete iframe.masque()',1);
    }
*/    
    // arr?t de l'animation
    window.clearTimeout(this.time);
    // masque la fen?tre
    this.fen.masqueFen();
/*
        window.clearTimeout(window.objects["fenWait"].time);
        window.objects["fenWait"].fen.masqueFen();
   if (window.objects["fenWait"]){
        window.clearTimeout(window.objects["fenWait"].time);
        window.objects["fenWait"].fen.masqueFen();
        window.objects["fenWait"]=null;          // a revoir, suicide un peu os? non ?
    }
*/
}

}


